#include "Menu.h"
#include <iostream>

#if INSTALANDO
#define PATH_FONT PATH_RESOURCES
#else
#define PATH_FONT "../Resources/"
#endif

Menu::Menu(string ruta, int ancho, int alto, vector<Solapa*> vector){
    fondo = cargar_imagen( ruta );
    
    string path_font = PATH_FONT;
    string path_fontArial = path_font + "fontArial.ttf"; 
    string path_fontMario = path_font + "fontMario.ttf";
    font14 = TTF_OpenFont(path_fontArial.c_str(), 14 );
    font54 = TTF_OpenFont(path_fontMario.c_str(), 54 );
    
    fondo = ajustar_imagen(fondo, ancho, alto);
    v_solapas = vector;
    solapa_activa = 0;
    estado = 0;
}

SDL_Surface* Menu::getFondo() {
	return fondo;
}

vector<Solapa*> Menu::getSolapas() {
	return v_solapas;
}

unsigned int Menu::getSolapaActiva() {
	return solapa_activa;
}

int Menu::getEstado() {
	return estado;
}

TTF_Font* Menu::getFont14() {
	return font14;
}

TTF_Font* Menu::getFont54() {
	return font54;
}

void Menu::setSolapaActiva(int i) {
	solapa_activa = i;
}

void Menu::setEstado(int i) {
	estado = i;
}

void Menu::DibujarFondo(SDL_Surface* pantalla, unsigned int modo){

    SDL_Color white = { 255, 255, 255 };
    SDL_Surface* mensaje = TTF_RenderText_Solid( getFont54(), "BIENVENIDO!", white );    //OJO! HARDCODE
    insertar_imagen( 145, 10, mensaje, getFondo() );                    //OJO! HARDCODE
    for (unsigned int i=0; i < getSolapas().size(); i++ ) {
    	(getSolapas().at(i))->DibujarDescripcion( getFondo(), i, getSolapaActiva() );
    	if ( i == getSolapaActiva() ) {
			
    		(getSolapas().at(i))->DibujarSolapa( getFondo(), getSolapaActiva(), modo );
    		
    	}
    }

    DibujarBarraEstado();

   insertar_imagen( 0, 0, getFondo(), pantalla );
   SDL_FreeSurface( mensaje );

}

void Menu::DibujarBarraEstado() {

	SDL_Surface* barra;
	barra = SDL_CreateRGBSurface(0, getSolapas().at(getSolapaActiva())->getAncho(), 25, 32, 255, 255, 255, 0 );
	SDL_FillRect(barra, NULL, SDL_MapRGB(barra->format, 170, 170, 170));

	SDL_Color black = { 0, 0, 0 };
	SDL_Surface* texto;

	if ( getEstado() == 0 ) {
		texto = TTF_RenderText_Solid( getFont14(), "Inicio" , black );        //OJO! HARDCODE
	} else if (getEstado() == 1) {
		texto = TTF_RenderText_Solid( getFont14(), "Conectado al servidor", black );  //OJO! HARDCODE
	} else if (getEstado() == 2) {
		texto = TTF_RenderText_Solid( getFont14(), "ERROR! No se pudo conectar al servidor", black );  //OJO! HARDCODE
	} else if (getEstado() == 3) {
		texto = TTF_RenderText_Solid( getFont14(), "Servidor corriendo", black );  //OJO! HARDCODE
	} else if (getEstado() == 4) {
		texto = TTF_RenderText_Solid( getFont14(), "ERROR! El personaje elegido esta ocupado", black );  //OJO! HARDCODE
	} else if (getEstado() == 5) {
		texto = TTF_RenderText_Solid( getFont14(), "Servidor Creado", black );  //OJO! HARDCODE
	} else if (getEstado() == 6) {
		texto = TTF_RenderText_Solid( getFont14(), "ERROR! No se pudo crear el servidor", black );  //OJO! HARDCODE
	} else if (getEstado() == 7) {
		texto = TTF_RenderText_Solid( getFont14(), "Creando el servidor...", black );  //OJO! HARDCODE
	} else if (getEstado() == 8) {
		texto = TTF_RenderText_Solid( getFont14(), "Conectando al servidor...", black );  //OJO! HARDCODE
	} else if (getEstado() == 9) {
		texto = TTF_RenderText_Solid( getFont14(), "Se perdio la conexion con el servidor", black );  //OJO! HARDCODE
	} else if (getEstado() == 10) {
		texto = TTF_RenderText_Solid( getFont14(), "Sincronizando recursos...", black );  //OJO! HARDCODE
	} else if (getEstado() == 11) {
		texto = TTF_RenderText_Solid( getFont14(), "No hay mas personajes disponibles para este servidor", black );  //OJO! HARDCODE
	} else if (getEstado() == 12) {
		texto = TTF_RenderText_Solid( getFont14(), "Espere un momento...", black );  //OJO! HARDCODE
	} else if (getEstado() == 13) {
		texto = TTF_RenderText_Solid( getFont14(), "Nivel elegido", black );  //OJO! HARDCODE
	} else if (getEstado() == 14) {
		texto = TTF_RenderText_Solid( getFont14(), "Se han detectado problemas", black );  //OJO! HARDCODE
	} else if (getEstado() == 15) {
		texto = TTF_RenderText_Solid( getFont14(), "Ya se han conectado todos los jugadores permitidos", black );  //OJO! HARDCODE
	}

	insertar_imagen( 5, 5, texto, barra);
	insertar_imagen( getSolapas().at(getSolapaActiva())->getX(),
			getSolapas().at(getSolapaActiva())->getY() + getSolapas().at(getSolapaActiva())->getAlto(),
			barra, getFondo() );

	SDL_FreeSurface(texto);
	SDL_FreeSurface(barra);

}

void Menu::handleMenu(SDL_Event event) {

    vector<Solapa*> v_solapas2 = getSolapas();
    for (unsigned int i=0; i < v_solapas2.size(); i++ ) {

        (v_solapas2.at(i))->handleSolapa(event, &solapa_activa, i, &estado );

    }

    (getSolapas().at(getSolapaActiva()))->handleSolapaActiva(event, &estado);

}

string Menu::getServidorPuerto() {
	return (((getSolapas().at(1))->getInputs().at(0))->getTexto()->getString());
}
string Menu::getServidorNivel() {
	int selec = getSolapas().at(1)->getDeslizantes().at(0)->getSeleccionado();
	return (getSolapas().at(1)->getDeslizantes().at(0)->getElementos().at(selec));
}

string Menu::getSingleNivel() {
	int selec = getSolapas().at(0)->getDeslizantes().at(0)->getSeleccionado();
	return (getSolapas().at(0)->getDeslizantes().at(0)->getElementos().at(selec));
}

string Menu::getClienteIp() {
	return (getSolapas().at(0)->getInputs().at(0)->getTexto()->getString());
}

string Menu::getClientePuerto() {
	return (getSolapas().at(0)->getInputs().at(1)->getTexto()->getString());
}

string Menu::getClientePersonaje() {
	int selec = getSolapas().at(0)->getDeslizantes().at(0)->getSeleccionado();
	return (getSolapas().at(0)->getDeslizantes().at(0)->getElementos().at(selec));
}

int Menu::getServidorCantidadPersonajes(){
	int selec = getSolapas().at(1)->getDeslizantes().at(1)->getSeleccionado();
	return (atoi(getSolapas().at(1)->getDeslizantes().at(1)->getElementos().at(selec).c_str()));
}


